home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / music / replayers / soundtrackervi.s < prev    next >
Encoding:
Text File  |  1980-01-04  |  8.5 KB  |  460 lines

  1. ;*********************************
  2. ;* SoundTracker VI - Playroutine *
  3. ;*                               *
  4. ;* Improved by Unknown of D.O.C  *
  5. ;* for SoundTracker IV and VI... *
  6. ;*********************************
  7. mt_speed    =    $1f4
  8.  
  9. mt_init:
  10. starta:        bsr.s    mt_setup
  11.         move.w    #$4000,$dff09a
  12.         move.l    $6c.w,mt_oldirq+2    ;needs VBR offsetting..
  13.         move.l    #mt_newirq,$6c.w    ;ditto..
  14.         move.w    #$c000,$dff09a
  15.         rts
  16.  
  17. mt_end:
  18. stop:        move.w    #$000f,$dff096
  19.         move.w    #$4000,$dff09a
  20.         move.l    mt_oldirq+2,$6c.w    ;needs VBR ofsetting..
  21.         move.w    #$c000,$dff09a
  22.         rts
  23.  
  24. mt_setup:    move.l    #mt_snd1,mt_sample1
  25.         move.l    #mt_snd2,mt_sample2
  26.         move.l    #mt_snd3,mt_sample3
  27.         move.l    #mt_snd4,mt_sample4
  28.         move.l    #mt_snd5,mt_sample5
  29.         move.l    #mt_snd6,mt_sample6
  30.         move.l    #mt_snd7,mt_sample7
  31.         move.l    #mt_snd8,mt_sample8
  32.         move.l    #mt_snd9,mt_sample9
  33.         move.l    #mt_snda,mt_sample10
  34.         move.l    #mt_sndb,mt_sample11
  35.         move.l    #mt_sndc,mt_sample12
  36.         move.l    #mt_sndd,mt_sample13
  37.         move.l    #mt_snde,mt_sample14
  38.         move.l    #mt_sndf,mt_sample15
  39.         move.l    #mt_sample1,a0
  40.         clr.l    d0
  41. mt_clear:    move.l    (a0,d0),a1
  42.         clr.l    (a1)
  43.         addq    #4,d0
  44.         cmp.l    #$3c,d0
  45.         bne.s    mt_clear
  46.  
  47.         move.w    #0,$dff0a8
  48.         move.w    #0,$dff0b8
  49.         move.w    #0,$dff0c8
  50.         move.w    #0,$dff0d8
  51.         clr.l    mt_partnrplay
  52.         clr.l    mt_partnote
  53.         clr.l    mt_partpoint
  54.  
  55.         move.b    mt_muzakdata+$1d6,mt_maxpart+1
  56.         move.b    mt_muzakdata+$1d7,mt_kn1+1
  57.         rts
  58.  
  59. mt_newirq:    movem.l    d0-d7/a0-a6,-(a7)
  60.         bsr.s    mt_music
  61.         movem.l    (a7)+,d0-d7/a0-a6
  62.         rte
  63.  
  64. mt_oldirq:    dc.w    $4ef9        ;no self modifying code thanks..
  65.         dc.l    $000000
  66.  
  67. mt_music:    addq.l    #1,mt_counter
  68. mt_cool:    cmp.l    #6,mt_counter
  69.         bne.s    mt_notsix
  70.         clr.l    mt_counter
  71.         bra    mt_rout2
  72.  
  73. mt_notsix:    lea    mt_aud1temp,a6
  74.         tst.b    3(a6)
  75.         beq.s    mt_arp1
  76.         move.l    #$dff0a0,a5        
  77.         bsr.s    mt_arprout
  78.  
  79. mt_arp1:    lea    mt_aud2temp,a6
  80.         tst.b    3(a6)
  81.         beq.s    mt_arp2
  82.         move.l    #$dff0b0,a5
  83.         bsr.s    mt_arprout
  84.  
  85. mt_arp2:    lea    mt_aud3temp,a6
  86.         tst.b    3(a6)
  87.         beq.s    mt_arp3
  88.         move.l    #$dff0c0,a5
  89.         bsr.s    mt_arprout
  90.  
  91. mt_arp3:    lea    mt_aud4temp,a6
  92.         tst.b    3(a6)
  93.         beq.s    mt_arp4
  94.         move.l    #$dff0d0,a5
  95.         bra.s    mt_arprout
  96. mt_arp4:    rts
  97.  
  98. mt_arprout:    tst.w    24(a6)
  99.         beq.s    mt_noslide
  100.  
  101.         clr.w    d0
  102.         move.b    25(a6),d0
  103.         lsr.b    #4,d0
  104.         tst.b    d0
  105.         beq.s    mt_voldwn2
  106.         bsr    mt_pushvol1
  107.         bra.s    mt_noslide
  108.  
  109. mt_voldwn2:    clr.w    d0
  110.         move.b    25(a6),d0
  111.         bsr    mt_pushvol2
  112.  
  113. mt_noslide:    move.b    2(a6),d0
  114.         and.b    #$0f,d0
  115.         tst.b    d0
  116.         beq    mt_arpegrt
  117.         cmp.b    #3,d0
  118.         beq    mt_arpegrt
  119.         cmp.b    #4,d0
  120.         beq    mt_arpegrt
  121.         cmp.b    #5,d0
  122.         beq    mt_arpegrt
  123.         cmp.b    #1,d0
  124.         beq.s    mt_portup
  125.         cmp.b    #6,d0
  126.         beq.s    mt_portup
  127.         cmp.b    #7,d0
  128.         beq.s    mt_portup
  129.         cmp.b    #8,d0
  130.         beq.s    mt_portup
  131.         cmp.b    #2,d0
  132.         beq.s    mt_portdwn
  133.         cmp.b    #9,d0
  134.         beq.s    mt_portdwn
  135.         cmp.b    #10,d0
  136.         beq.s    mt_portdwn
  137.         cmp.b    #11,d0
  138.         beq.s    mt_portdwn
  139.         cmp.b    #13,d0
  140.         beq.s    mt_volup
  141.         rts
  142.  
  143. mt_portup:    clr.w    d0
  144.         move.b    3(a6),d0
  145.         sub.w    d0,22(a6)
  146.         cmp.w    #$71,22(a6)
  147.         bpl.s    mt_ok1
  148.         move.w    #$71,22(a6)
  149. mt_ok1:        move.w    22(a6),6(a5)
  150.         rts
  151.  
  152. mt_portdwn:    clr.w    d0
  153.         move.b    3(a6),d0
  154.         add.w    d0,22(a6)
  155.         cmp.w    #$358,22(a6)
  156.         bmi.s    mt_ok2
  157.         move.w    #$358,22(a6)
  158. mt_ok2:        move.w    22(a6),6(a5)
  159.         rts
  160.  
  161. mt_volup:    clr.w    d0
  162.         move.b    3(a6),d0
  163.         lsr.b    #4,d0
  164.         tst.b    d0
  165.         beq.s    mt_voldwn
  166. mt_pushvol1:    add.w    d0,$12(a6)
  167.         cmp.w    #$40,$12(a6)
  168.         bmi.s    mt_ok3
  169.         move.w    #$40,$12(a6)
  170. mt_ok3:        move.w    $12(a6),8(a5)
  171.         rts
  172.  
  173. mt_voldwn:    clr.w    d0
  174.         move.b    3(a6),d0
  175. mt_pushvol2:    and.b    #$0f,d0
  176.         sub.w    d0,$12(a6)
  177.         bpl.s    mt_ok4
  178.         clr.w    $12(a6)
  179. mt_ok4:        move.w    $12(a6),8(a5)
  180.         rts
  181.  
  182. mt_arpegrt:    cmp.l    #1,mt_counter
  183.         beq.s    mt_loop2
  184.         cmp.l    #2,mt_counter
  185.         beq.s    mt_loop3
  186.         cmp.l    #3,mt_counter
  187.         beq.s    mt_loop4
  188.         cmp.l    #4,mt_counter
  189.         beq.s    mt_loop2
  190.         cmp.l    #5,mt_counter
  191.         beq.s    mt_loop3
  192.         rts
  193.  
  194. mt_loop2:    clr.l    d0
  195.         move.b    3(a6),d0
  196.         lsr.b    #4,d0
  197.         bra.s    mt_cont
  198.  
  199. mt_loop3:    clr.l    d0
  200.         move.b    3(a6),d0
  201.         and.b    #$0f,d0
  202.         bra.s    mt_cont
  203.  
  204. mt_loop4:    move.w    16(a6),d2
  205.         bra.s    mt_endpart
  206.  
  207. mt_cont:    lsl.w    #1,d0
  208.         clr.l    d1
  209.         move.w    16(a6),d1
  210.         lea    mt_arpeggio,a0
  211.  
  212. mt_loop5:    move.w    (a0,d0),d2
  213.         cmp.w    (a0),d1
  214.         beq.s    mt_endpart
  215.         addq.l    #2,a0
  216.         bra.s    mt_loop5
  217.  
  218. mt_endpart:    move.w    d2,6(a5)
  219.         rts
  220.  
  221. mt_rout2:    lea    mt_muzakdata,a0
  222.         move.l    a0,a3
  223.         add.l    #$0c,a3
  224.         move.l    a0,a2
  225.         add.l    #$1d8,a2
  226.         add.l    #$258,a0
  227.         move.l    mt_partnrplay,d0
  228.         clr.l    d1
  229.         move.b    (a2,d0),d1
  230.         mulu    #$0400,d1
  231.         add.l    mt_partnote,d1
  232.         move.l    d1,mt_partpoint
  233.         clr.w    mt_dmacon
  234.  
  235.         move.l    #$dff0a0,a5
  236.         lea    mt_aud1temp,a6
  237.         bsr    mt_playit
  238.  
  239.         move.l    #$dff0b0,a5
  240.         lea    mt_aud2temp,a6
  241.         bsr    mt_playit
  242.  
  243.         move.l    #$dff0c0,a5
  244.         lea    mt_aud3temp,a6
  245.         bsr    mt_playit
  246.  
  247.         move.l    #$dff0d0,a5
  248.         lea    mt_aud4temp,a6
  249.         bsr    mt_playit
  250.  
  251.         move.l    #mt_speed,d0
  252. mt_rls:        dbf    d0,mt_rls    ** LAME CPU DEPENDANT DBF LOOP!! **
  253.  
  254.         move.l    #$8000,d0
  255.         add.w    mt_dmacon,d0
  256.         move.w    d0,$dff096
  257.  
  258.         move.l    #mt_aud4temp,a6
  259.         cmp.w    #1,14(a6)
  260.         bne.s    mt_voice3
  261.         move.l    10(a6),$dff0d0
  262.         move.w    #1,$dff0d4
  263. mt_voice3:    move.l    #mt_aud3temp,a6
  264.         cmp.w    #1,14(a6)
  265.         bne.s    mt_voice2
  266.         move.l    10(a6),$dff0c0
  267.         move.w    #1,$dff0c4
  268. mt_voice2:    move.l    #mt_aud2temp,a6
  269.         cmp.w    #1,14(a6)
  270.         bne.s    mt_voice1
  271.         move.l    10(a6),$dff0b0
  272.         move.w    #1,$dff0b4
  273. mt_voice1:    move.l    #mt_aud1temp,a6
  274.         cmp.w    #1,14(a6)
  275.         bne.s    mt_voice0
  276.         move.l    10(a6),$dff0a0
  277.         move.w    #1,$dff0a4
  278. mt_voice0:    move.l    mt_partnote,d0
  279.         add.l    #$10,d0
  280.         move.l    d0,mt_partnote
  281.         cmp.l    #$400,d0
  282.         bne.s    mt_stop
  283.         clr.l    mt_partnote
  284.         addq.l    #1,mt_partnrplay
  285.         clr.l    d0
  286.         move.w    mt_maxpart,d0
  287.         move.l    mt_partnrplay,d1
  288.         cmp.l    d0,d1
  289.         bne.s    mt_stop
  290.         clr.l    mt_partnrplay
  291. mt_stop:    rts
  292.  
  293. mt_playit:    move.l    (a0,d1),(a6)
  294.         addq.l    #4,d1
  295.         clr.l    d2
  296.         move.b    2(a6),d2
  297.         and.b    #$f0,d2
  298.         lsr.b    #4,d2
  299.         tst.b    d2
  300.         beq.s    mt_nosamplechange
  301.  
  302.         clr.l    d3
  303.         lea    mt_samples,a1
  304.         move.l    d2,d4
  305.         mulu    #4,d2
  306.         mulu    #$1e,d4
  307.         move.l    (a1,d2),4(a6)
  308.         move.w    (a3,d4),8(a6)
  309.         move.w    2(a3,d4),18(a6)
  310.         move.w    4(a3,d4),d3
  311.         tst.w    d3
  312.         beq.s    mt_displace
  313.         move.l    4(a6),d2
  314.         add.l    d3,d2
  315.         move.l    d2,4(a6)
  316.         move.l    d2,10(a6)
  317.         move.w    6(a3,d4),8(a6)
  318.         move.w    6(a3,d4),14(a6)
  319.         move.w    18(a6),8(a5)
  320.         bra.s    mt_nosamplechange
  321.  
  322. mt_displace:    move.l    4(a6),d2
  323.         add.l    d3,d2
  324.         move.l    d2,10(a6)
  325.         move.w    6(a3,d4),14(a6)
  326.         move.w    18(a6),8(a5)
  327. mt_nosamplechange:
  328.         tst.w    (a6)
  329.         beq.s    mt_retrout
  330.         move.w    (a6),16(a6)
  331.         move.w    20(a6),$dff096
  332.         move.l    4(a6),(a5)
  333.         move.w    8(a6),4(a5)
  334.         move.w    (a6),6(a5)
  335.         move.w    20(a6),d0
  336.         or.w    d0,mt_dmacon
  337.  
  338. mt_retrout:    move.w    20(a6),d0
  339.         lsl.w    #4,d0
  340.         add.w    20(a6),d0
  341.         move.w    d0,$dff09e
  342.  
  343.         tst.w    (a6)
  344.         beq.s    mt_nonewper
  345.         move.w    (a6),22(a6)
  346.  
  347. mt_nonewper:    move.b    2(a6),d0
  348.         and.b    #$0f,d0
  349.         cmp.b    #14,d0
  350.         bne.s    mt_noset
  351.         move.w    2(a6),24(a6)
  352.         rts
  353.  
  354. mt_noset:    tst.b    3(a6)
  355.         bne.s    mt_noclr
  356.         clr.w    24(a6)
  357. mt_noclr:    cmp.b    #3,d0
  358.         beq.s    mt_modvol
  359.         cmp.b    #6,d0
  360.         beq.s    mt_modvol
  361.         cmp.b    #9,d0
  362.         beq.s    mt_modvol
  363.         cmp.b    #4,d0
  364.         beq.s    mt_modper
  365.         cmp.b    #7,d0
  366.         beq.s    mt_modper
  367.         cmp.b    #10,d0
  368.         beq.s    mt_modper
  369.         cmp.b    #5,d0
  370.         beq.s    mt_modvolper
  371.         cmp.b    #8,d0
  372.         beq.s    mt_modvolper
  373.         cmp.b    #11,d0
  374.         beq.s    mt_modvolper
  375.         cmp.b    #15,d0
  376.         beq.s    mt_chgspeed
  377.         cmp.b    #12,d0
  378.         bne.s    mt_nochnge
  379.         move.b    3(a6),8(a5)
  380. mt_nochnge:    rts
  381.  
  382. mt_chgspeed:    move.b    3(a6),d0
  383.         and.b    #$0f,d0
  384.         beq.s    mt_nochnge
  385.         clr.l    mt_counter
  386.         move.b    d0,mt_cool+5
  387.         rts
  388.  
  389. mt_modvol:    move.w    20(a6),d0
  390.         bra.s    mt_push
  391.  
  392. mt_modper:    move.w    20(a6),d0
  393.         lsl.w    #4,d0
  394.         bra.s    mt_push
  395.  
  396. mt_modvolper:    move.w    20(a6),d0
  397.         lsl.w    #4,d0
  398.         add.w    20(a6),d0
  399.  
  400. mt_push:    add.w    #$8000,d0
  401.         move.w    d0,$dff09e
  402.         rts
  403.  
  404. mt_aud1temp:    dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  405.         dc.w $0000,$0000,$0001,$0000,$0000
  406. mt_aud2temp:    dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  407.         dc.w $0000,$0000,$0002,$0000,$0000
  408. mt_aud3temp:    dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  409.         dc.w $0000,$0000,$0004,$0000,$0000
  410. mt_aud4temp:    dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  411.         dc.w $0000,$0000,$0008,$0000,$0000
  412. mt_partnote:    dc.l 0
  413. mt_partnrplay:    dc.l 0
  414. mt_counter:    dc.l 0
  415. mt_partpoint:    dc.l 0
  416. mt_samples:    dc.w $0000,$0000
  417. mt_sample1:    dc.l 0
  418. mt_sample2:    dc.l 0
  419. mt_sample3:    dc.l 0
  420. mt_sample4:    dc.l 0
  421. mt_sample5:    dc.l 0
  422. mt_sample6:    dc.l 0
  423. mt_sample7:    dc.l 0
  424. mt_sample8:    dc.l 0
  425. mt_sample9:    dc.l 0
  426. mt_sample10:    dc.l 0
  427. mt_sample11:    dc.l 0
  428. mt_sample12:    dc.l 0
  429. mt_sample13:    dc.l 0
  430. mt_sample14:    dc.l 0
  431. mt_sample15:    dc.l 0
  432. mt_maxpart:    dc.w $0000
  433. mt_kn1:        dc.w $0000
  434. mt_dmacon:    dc.w $0000
  435.  
  436. mt_arpeggio:    dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  437.         dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  438.         dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  439.         dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  440.         dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  441. instru:
  442. mt_snd1:    dcb.b    6500,0
  443. mt_snd2:    dcb.b    8900,0
  444. mt_snd3:    dcb.b    9200,0
  445. mt_snd4:    dcb.b    1100,0
  446. mt_snd5:    dcb.b    4000,0
  447. mt_snd6:    dcb.b    2000,0
  448. mt_snd7:    dcb.b    5400,0
  449. mt_snd8:    dcb.b    5000,0
  450. mt_snda:    dcb.b    2000,0
  451. mt_sndb:    dcb.b    8000,0
  452. mt_sndc:    dcb.b    9900,0
  453. mt_sndd:    dcb.b    2000,0
  454. mt_snd9:    dcb.b    2,0
  455. mt_snde:    dcb.b    2,0
  456. mt_sndf:    dcb.b    2,0
  457. song:
  458. mt_muzakdata:    dcb.b    18008,0
  459.  
  460.